home *** CD-ROM | disk | FTP | other *** search
/ Ian & Stuart's Australian Mac 1993 September / clonecd / September 93.img / Archives / Fun, Tricks & Hacks / Ümlåût Õmêléttè / ü.a < prev    next >
Text File  |  1992-06-19  |  3KB  |  92 lines

  1.     CASE    ON
  2.     INCLUDE    'Traps.a'
  3.     IMPORT    Umlaut
  4.     
  5. InitEntry PROC EXPORT
  6.     IMPORT    PatchStart
  7.     
  8.     LEA        InitEntry,A0        ; Get start address
  9.     _RecoverHandle                ; Get the handle
  10.     _GetHandleSize                ; And its size
  11.     LEA        PatchStart,A0        ; Get the start of the patch
  12.     LEA        InitEntry,A1        ; Get the start of the install code
  13.     SUBA.L    A1,A0                ; Figure the length of the install code
  14.     SUB.L    A0,D0                ; Figure length of the real code
  15.     MOVE.L    D0,D1                ; Save a copy
  16.     _NewPtr ,sys                 ; Allocate room for the code
  17.     BNE.S    ExitInstall            ; Exit if error
  18.     MOVE.L    A0,A1                ; Set up dest ptr
  19.     LEA        PatchStart,A0        ; Set up src ptr
  20.     MOVE.L    D1,D0                ; And length
  21.     _BlockMove                    ; Copy the code
  22.     MOVE.L    #$82,D0                ; Load trap number
  23.     _GetTrapAddress                ; Get that address
  24.     MOVE.L    A0,$4(A1)            ; Store in patch header
  25.     MOVE.L    #$ED,D0                ; StdTxMeas trap id
  26.     _GetTrapAddress                ; Get it
  27.     MOVE.L    A0,$8(A1)            ; Stuff it
  28.     MOVE.L    #$600,D0            ; Allocate big ptr for buffer
  29.     MOVE.W    D0,$10(A1)            ; Store the size
  30.     _NewPtr ,sys                ; Allocate the buffer
  31.     BNE.S    ExitInstall            ; Gack!
  32.     MOVE.L    A0,$C(A1)            ; Store it
  33.     MOVE.L    A1,A0                ; Get patch address
  34.     MOVE.L    #$82,D0                ; And trap number
  35.     _SetTrapAddress                ; Set address
  36.     LEA        $2(A1),A0            ; Get patch address (2nd)
  37.     MOVE.L    #$ED,D0                ; And trap number
  38.     _SetTrapAddress                ; Set address
  39. ExitInstall:
  40.     RTS                            ; Done!
  41.     ENDP
  42.     
  43. ;    pascal void StdText(short count,const void *textAddr,Point numer,Point denom)
  44. ;    pascal short StdTxMeas(short byteCount,const void *textAddr,Point *numer,
  45. ;       Point *denom,FontInfo *info)
  46.  
  47. PatchStart    PROC EXPORT
  48.     BRA.S    TextPatch            ; Jump past data record (2 bytes)
  49.     BRA.S    MeasPatch            ; (2 more bytes)
  50. dataSpot:
  51.     DC.L    0                    ; Old _StdText address (PatchStart+4,dataSpot+0)
  52.     DC.L    0                    ; Old _StdTxMeas address (PatchStart+8,dataSpot+4)
  53.     DC.L    0                    ; Ptr to intermediate buffer (PatchStart+C,dataSpot+8)
  54.     DC.W    0                    ; How much room do we got? (PatchStart+10,dataSpot+C)
  55. TextPatch:
  56.     MOVE.L    $C(A7),A1            ; Get a pointer to text
  57.     MOVE.W    $10(A7),D0            ; Get the length
  58.     JSR        MungeText            ; Munge the text
  59.     MOVE.L    A1,$C(A7)            ; Change buffer, if needed
  60.     MOVE.L    dataSpot+0,A0        ; Get old address
  61.     JMP        (A0)                ; There we go!
  62. MeasPatch:
  63.     MOVE.L    $10(A7),A1            ; Get a pointer to text
  64.     MOVE.W    $14(A7),D0            ; Get the length
  65.     JSR        MungeText            ; Munge the text
  66.     MOVE.L    A1,$10(A7)            ; Change buffer, if needed
  67.     MOVE.L    dataSpot+4,A0        ; Get old address
  68.     JMP        (A0)                ; There we go!
  69. MungeText:
  70.     MOVE.L    (A5),A0                ; Get a pointer to QD globals
  71.     MOVE.L    (A0),A0                ; Get a pointer to the current port
  72.     CMP.W    #0,$44(A0)            ; Is font system font?
  73.     BNE.S    Fini                ; If not, bail
  74.     CMP.W    #0,$4A(A0)            ; Is font system size?
  75.     BNE.S    Fini                ; Outa here
  76.     CMP.W    $C+dataSpot,D0        ; Check amount of text against buffer size
  77.     BGE.S    Fini                ; If too small, die
  78.     EXT.L    D0                    ; Extend for BlockMove
  79.     MOVE.L    D0,-(A7)            ; For later call to Umlaut()
  80.     MOVE.L    A1,A0                ; Get source address
  81.     MOVE.L    $8+dataSpot,A1        ; Get dest
  82.     _BlockMove                    ; Move the text
  83.     MOVE.L    A1,-(A7)            ; Store address
  84.     JSR        Umlaut                ; Umlaut(char *buffer,int len);
  85.     ADD.L    #$8,SP                ; Pop arguments
  86.     MOVE.L    $8+dataSpot,A1        ; Set up A1 to our buffer
  87. Fini:
  88.     RTS
  89.     ENDP
  90.     
  91.     END
  92.